<?php

/**
 * mForge Framework
 *
 * LICENSE:
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * The license is bundled with this package in the file LICENSE.txt.
 * You may also obtain a copy of the License at this URL:
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * @copyright  Copyright (c) 2011, Jonathan Hedrén
 * @author     Jonathan Hedrén <jonathan.hedren@gmail.com>
 * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
 */

namespace mForge;

/**
 * The RoutingContext holds information about the current route and the module
 * from where it was registered.
 */
class RoutingContext
{
    /**
     *
     * @var IModule
     */
    private $module;

    /**
     *
     * @var string
     */
    private $moduleName;

    /**
     *
     * @var string
     */
    private $route;

    /**
     *
     * @var array
     */
    private $routeParams;

    /**
     *
     * @var array
     */
    private $routeTokens;


    /**
     *
     * @param string $route
     * @param array $routeTokens
     * @param array $routeParams
     * @param string $moduleName
     * @param IModule $module 
     */
    public function __construct($route, array $routeTokens, array $routeParams, $moduleName, IModule $module)
    {
        $this->route = $route;
        $this->routeTokens = $routeTokens;
        $this->routeParams = $routeParams;
        $this->moduleName = $moduleName;
        $this->module = $module;
    }

    /**
     * Returns the current route.
     *
     * @return string
     */
    public function getRoute()
    {
        return $this->route;
    }

    /**
     * Returns the tokens of the current route (excluding any mapped params).
     *
     * @return array
     */
    public function getRouteTokens()
    {
        return $this->routeTokens;
    }

    /**
     * Returns an associative array of any route parameters.
     *
     * @return array
     */
    public function getRouteParams()
    {
        return $this->routeParams;
    }

    /**
     * Returns the module that registered the current route.
     *
     * @return IModule
     */
    public function getModule()
    {
        return $this->module;
    }

    /**
     * Returns the name of the module that registered the current route.
     *
     * @return string
     */
    public function getModuleName()
    {
        return $this->moduleName;
    }
}